package com.xzq.springframework.beans.factory.support;

import com.xzq.springframework.beans.BeansException;
import com.xzq.springframework.beans.factory.config.BeanDefinition;

/**
 * @Author xzq
 * @Description //  自动装配Bean抽象类   负责完成创建Bean的全过程
 * @Date 2021/11/24 11:44
 * @Version 1.0.0
 **/
public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory{

    /**
     *      创建Bean的核心方法
     *              1，实例化Bean
     *              2, 依赖注入
     *              3，初始化Bean
     *              4, 加入Bean实例缓存中（一级缓存）
     * @param name
     * @param beanDefinition
     * @return
     */
    @Override
    protected Object createBean(String name, BeanDefinition beanDefinition) {
        Object bean = null;
        try {
            bean = beanDefinition.getBeanClass().newInstance();
        } catch (Exception e) {
            throw new BeansException("bean instantiation failed");
        }
        //注册到缓存单例
        registerSingleton(name, bean);
        return bean;
    }

}
